home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu453.dms / pu453.adf / extras / basic_sources / pcqshell.bas < prev    next >
BASIC Source File  |  1992-11-08  |  34KB  |  1,149 lines

  1. REM ** PCQ Pascal Shell - HiSoft Basic Revision - 17-12-1990 **
  2. REM ** Rev.B   Removes default window , Better file routines **
  3. REM **                                    DAC 5-4-1991       **
  4. REM ** Rev.C   Arp Requester , MANY bugs fixed               **
  5. REM **                                    DAC 6-11-1992      **
  6. REM $option Y+,B-,Frmd:pcqshell.run
  7.  
  8. LIBRARY "arp.library"                                                      
  9. REM LIBRARY "dos.library"
  10. DECLARE FUNCTION xopen& LIBRARY
  11. DECLARE FUNCTION FileRequest& LIBRARY                                                   
  12. DIM req&(7)    
  13.   
  14. MENU 1,0,1,"Project"
  15. MENU 1,1,1,"Load Source"
  16. MENU 1,2,1,"Save Source"
  17. MENU 1,3,1,"Save Object"
  18. MENU 1,4,1,"Exit       "
  19.  
  20. MENU 2,0,1,"Actions"
  21. MENU 2,1,1,"Edit    "
  22. MENU 2,2,1,"Compile "
  23. MENU 2,3,1,"Assemble"
  24. MENU 2,4,1,"Link    "
  25. MENU 2,5,1,"C-A-L   "
  26. MENU 2,6,1,"Run prog"
  27.  
  28. MENU 3,0,1,"Extras     "
  29. MENU 3,1,1,"Cli-Command"
  30. MENU 3,2,1,"Directory  "
  31. MENU 3,3,1,"Change font"
  32. MENU 3,4,1,"Disk Free  "
  33. MENU 3,5,1,"Exec bckgrd"
  34. MENU 3,6,1,"Avail. mem "
  35. MENU 3,7,1,"Make Dir   "
  36.  
  37. MENU 4,0,1,"Help Me!    "
  38. MENU 4,1,1,"About       "
  39. MENU 4,2,1,"Instructions"
  40. MENU 4,3,1,"Extended dox"
  41. MENU 4,4,1,"Auto Help   "
  42. MENU 4,5,1,"Contact ..  "
  43.  
  44. MENU 5,0,1,"1-Meg +    "
  45. MENU 5,1,1,"Ram-Install"
  46.  
  47. ON MENU GOSUB menuhandler
  48. MENU ON
  49.  
  50. ON BREAK GOSUB ed
  51. BREAK ON
  52.  
  53. REM Create the capture file (to avoid needless bugging ..)
  54. OPEN "O",#1,"rmd:capture":CLOSE #1
  55.  
  56. BEEP
  57.  
  58. SCREEN 2,640,256,2,2
  59. WINDOW 2,"PCQ Pascal Shell by David A. Caruana",,0,2
  60. PALETTE 0,.7,.7,.7 : PALETTE 1,0,0,0
  61. PALETTE 2,1,1,1 : PALETTE 3,.4,.2,.9
  62. scrn& = PEEKL(WINDOW(7)+46) : POKEW(scrn&+20),17
  63.  
  64. PRINT "           __      __    __"
  65. PRINT "          |  \    /     /  \                           "
  66. PRINT "          |   |  |     |    |    __   __   __    ____  __    "
  67. PRINT "          |   |  |     |    |   |  | /  \ (     /     /  \ |"
  68. PRINT "          |__/   |     |    |   |  | |  |  \    |     |  | |"
  69. PRINT "          |      |     |    |   |__| +--+   \   |     +--+ |"
  70. PRINT "          |      |     |   \|   |    |  |    \  |     |  | |"
  71. PRINT "          |       \___  \__/\_  |    |  | ____) \ ___ |  | |____"
  72. PRINT ""       
  73. PRINT  "                       David Alan Caruana"
  74. PRINT  "                        PCQ Pascal Shell"
  75. PRINT  "                      For PCQ Pascal by ..."
  76. PRINT  "                         Patrick Quaid"
  77. PRINT 
  78. PRINT  "                          Program Log ..."
  79. PRINT 
  80. PRINT  "PCQShell>";
  81.  
  82. start:
  83. GOTO start
  84.  
  85. END
  86.  
  87. REM ---------------- P R O C E D U R E S
  88.  
  89. SUB requester(greet$,dir$,file$,colr) STATIC                                 
  90.   SHARED req&()                                                              
  91.   greet$=greet$+CHR$(0)                                                      
  92.   dir$=dir$+STRING$(354,0)                                                   
  93.   file$=file$+STRING$(32,0)                                                  
  94.   req&(0)=SADD(greet$)                                                       
  95.   req&(1)=SADD(file$)                                                        
  96.   req&(2)=SADD(dir$)                                                         
  97.   req&(3)=WINDOW(7)                                                          
  98.   req&(4)=2^28-2^29*(colr=1)                                                 
  99.   temp&=FileRequest&(VARPTR(req&(0)))                                        
  100.   IF temp&=0 THEN file$=CHR$(0)                                              
  101.   dir$=LEFT$(dir$,INSTR(dir$,CHR$(0))-1)                                     
  102.   file$=LEFT$(file$,INSTR(file$,CHR$(0))-1)                                  
  103. END SUB  
  104.  
  105. extend:
  106.     PRINT "Extensions"
  107.     FOR x = 1 TO 20 : PRINT : NEXT x
  108.     CLS
  109.     PRINT "PCQ Pascal Shell Extended Documentation"
  110.     PRINT ""
  111.     PRINT "You are using the November 1992 update of PCQ Pascal Shell by"
  112.     PRINT "               -- David Alan Caruana --"
  113.     PRINT "Among the many enhancements are ..."
  114.     PRINT "- Support for arp.library requesters"
  115.     PRINT "- 3D alerts (WB2.0 style) even on WB1.3"
  116.     PRINT "- This version is compiled using HiSoft BASIC (not AC-BASIC)"
  117.     PRINT "  i.e. it is smaller and it runs faster ..."
  118.     PRINT "- This version can work on systems with only 1 drive"
  119.     PRINT "  i.e. Save/Load commands have been enhanced"
  120.     PRINT "- This version will also work on standard , unexpanded Amigas"
  121.     PRINT "  (although 1 Meg or more memory + a good monitor are recommended"
  122.     PRINT "- This version is now distributable (previous version required major"
  123.     PRINT "  changes to work on machines other than my own (!!)"
  124.     PRINT ""
  125.     PRINT "  (Press a key for next page ...)"
  126.     WHILE INKEY$="":WEND
  127.     CLS
  128.     PRINT "PCQ Pascal Shell Extended Documentation : Continued"
  129.     PRINT 
  130.     PRINT "Some Help For New Users"
  131.     PRINT "-----------------------"
  132.     PRINT "These are some tips I have gained by experience ... hope they"
  133.     PRINT "are helpful ....!!!"
  134.     PRINT "- NEVER mix integers and reals (floating point) in the same "
  135.     PRINT "mathematical statement . This means that if you multiply an integer"
  136.     PRINT "by a real , your proggy WON`T WORK ...."
  137.     PRINT "SOLUTION : Either keep everything real (or everything integer)"
  138.     PRINT "or else remember to convert all integers to real (store in a "
  139.     PRINT "temporary variable .... I think the format was "
  140.     PRINT "TEMP := FLOAT(INTG);"
  141.     PRINT "where TEMP is a floating point variable (declared as REAL) and"
  142.     PRINT "INTG is an integer . When multiplying , now use TEMP instead of"
  143.     PRINT "INTG and your problem is solved ... If you are having problems"
  144.     PRINT "with CONST - declared variables , remember that is you want "
  145.     PRINT "(for example) a floating 2 , the following works ..."
  146.     PRINT "CONST"
  147.     PRINT "  inttwo = 2 ;     { This is an integer 2 }"
  148.     PRINT "  floattwo = 2.0;  { And this is a floating }"
  149.     PRINT ""
  150.     PRINT "- PCQ Pascal accepts comments surrounded by curly brackets "
  151.     PRINT "  i.e. { and } and NOT (* , *) (as on some mainframes)"
  152.     PRINT "  To convert these , you should use the search and replace"
  153.     PRINT "  available on most text editors ..."
  154.     PRINT ""
  155.     PRINT "Press a key for next page ..."
  156.     WHILE INKEY$="":WEND
  157.     CLS
  158.     PRINT "Running Programs"
  159.     PRINT "----------------"
  160.     PRINT ""
  161.     PRINT "Unless your program opens its own window , the Run Prog option"
  162.     PRINT "in the menu will not work well . To run the program in memory"
  163.     PRINT "(for test purposes) do the following ..."
  164.     PRINT "1 - Press [Left Amiga Key][N]"
  165.     PRINT "This will bring you to the workbench screen"
  166.     PRINT "2 - If there are any windows infront of the AmigaDOS window"
  167.     PRINT "push them back using the front-to-back gadget (gadget to the"
  168.     PRINT "left in top-right corner) . . . "
  169.     PRINT "3 - Click once within AmigaDOS window to activate it"
  170.     PRINT "4 - (at the 1> prompt) - type in "
  171.     PRINT "RMD:SOURCE"
  172.     PRINT "This will load in and run the compiled program from memory"
  173.     PRINT "5 - Press [Left Amiga Key][M] to restore the shell screen."
  174.     PRINT ""
  175.     PRINT "Handy Tip ..."
  176.     PRINT "To change the editor colors use [Amiga Key][2]"
  177.     PRINT ""
  178.     PRINT "The rest of the updates should be reasonably self explanatory"
  179.     PRINT ""
  180.     PRINT "***** I M P O R T A N T  *****"
  181.     PRINT "If an alert etc. causes you to go to the workbench screen"
  182.     PRINT "press [left Amiga key][M] to bring back the PCQ-Shell screen"
  183.     PRINT "If required click once to activate it ..."
  184.     PRINT "Rev B , 5-4-1991 : That shouldn't happen again now (he he)"
  185.     PRINT "Press any key"
  186.     WHILE INKEY$="":WEND
  187.     CLS
  188.     PRINT "Enhanced LOAD/SAVE routines ..."
  189.     PRINT ""
  190.     PRINT "These are enhancements allowing PCQ Pascal to be used by"
  191.     PRINT "single drive owners ... Only LOAD and SAVE source have"
  192.     PRINT "been enhanced ... sorry! ... The SAVE OBJECT may work if"
  193.     PRINT "the C directory is assigned to ramdisk i.e."
  194.     PRINT "(CLI-Command)   ASSIGN C: ram:"
  195.     PRINT "However , remember to reassign back C: to its original"
  196.     PRINT "position if you do not want some nasty surprises !!!"
  197.     PRINT "As a precaution , always save your source before running."
  198.     PRINT ""
  199.     PRINT "Changing the Temporaries Directory"
  200.     PRINT "PCQ Pascal Shell holds its temporaries in volume RMD:"
  201.     PRINT "You may edit the startup-sequence to place RMD: in any"
  202.     PRINT "folder , drive etc. For KCS Power PC Board users, RMD:"
  203.     PRINT "can be profitably placed in the KCS Ram Ramdisk (This "
  204.     PRINT "also frees quite-a-bit of memory .. "
  205.     PRINT ""
  206.     PRINT "Press any key"
  207.     WHILE INKEY$ = "" : WEND
  208.     CLS
  209.     PRINT "Rev B , 5-4-1991 : FileCheck routine"
  210.     PRINT "PCQ Pascal Shell now checks if a file exists (using DOS functions)"
  211.     PRINT "before attempting to load it resulting in many less crashes ."
  212.     PRINT "If you are a single drive user and the load routine still refuses"
  213.     PRINT "to work , try loading a small file (df0:s/startup-sequence is good)"
  214.     PRINT "from the PCQShell disk (do this only once per session to as to"
  215.     PRINT "'awake' AmigaDOS and then load your actual file . (the other "
  216.     PRINT "better solution is to buy an external drive ..)"
  217.     PRINT ""
  218.     PRINT "Rev C , 6-11-1992 : Arp Requester and 3D alerts"
  219.     PRINT "PCQ Pascal Shell now uses the arp file-requester for filenames."
  220.     PRINT "This means that arp.library must be in the libs: directory"
  221.     PRINT "of your boot-disk . "
  222.     PRINT "Alerts now have a nice 3D-look and when the program closes/opens"
  223.     PRINT "its screen, colors are reset OK ."
  224.     PRINT ""
  225.     PRINT "I hope you enjoy using this software and find it useful . At this"
  226.     PRINT "point I would like to give credit once again to P.C.Quaid for"
  227.     PRINT "programming a goody-goody Pascal Compiler .. Thanx!"
  228.     PRINT ""
  229.     PRINT "Programmed by David Alan Caruana"
  230.     PRINT ""
  231.     PRINT "Note to all lamers : HANDS OFF MY WORK YOU LOSERS !!"
  232.     
  233. RETURN
  234.     
  235. instructions:
  236.   PRINT  "Instructions"
  237.   FOR x = 1 TO 20 : PRINT  : NEXT x
  238.   PRINT  "PCQ Pascal Shell Instructions"
  239.   PRINT 
  240.   PRINT  "Use the menus to access functions ..."
  241.   PRINT 
  242.   PRINT  "The first menu (project) is for load/save functions"
  243.   PRINT 
  244.   PRINT  "The second menu (actions) is the interesting menu ..."
  245.   PRINT  "Functions are ..."
  246.   PRINT  "EDIT - Edit pascal program in memory"
  247.   PRINT  "COMPILE - Compile pascal program in memory"
  248.   PRINT  "ASSEMBLE - Assemble program in memory"
  249.   PRINT  "LINK - Link program in memory"
  250.   PRINT  "C-A-L - Compile,Assemble and Link program in memory"
  251.   PRINT  "Run Prog - Runs the program in memory (careful - save first!)"
  252.   PRINT 
  253.   PRINT  "The third menu provides some utilities (easy to use...)"
  254.   PRINT  
  255.   PRINT  "The fourth menu (HELP ME!) provides some information"
  256.   PRINT 
  257.   PRINT 
  258.   PRINT  "Press a key ..."
  259.   WHILE INKEY$<>"":WEND
  260.   WHILE INKEY$="":WEND
  261.   FOR x = 1 TO 10 : PRINT  "" : NEXT x
  262.   PRINT  "TECHNICAL DOCUMENTATION"
  263.   PRINT 
  264.   PRINT  "Temporary filenames ..."
  265.   PRINT  "Source code     - RMD:source.p"
  266.   PRINT  "Assembly source - RMD:source.a"
  267.   PRINT  "Object code     - RMD:source.o"
  268.   PRINT  "Executable prog - RMD:source"
  269.   PRINT 
  270.   PRINT  "To run shell , type RUN SHELL/PCQSHELL.RUN"
  271.   PRINT 
  272.   PRINT  "RMD: is an identifier for the KCS Power-PC-Board Ramdisk"
  273.   PRINT 
  274.   PRINT  "To run on other systems ...(without KCS Board)"
  275.   PRINT  "1-Meg-Plus systems : Rename the ramdisk (AmigaDOS v1.3) as RMD:"
  276.   PRINT  "0.5-Meg-Systems :"
  277.   PRINT  "Either -1 Rename a disk as RMD: and use for temporaries"
  278.   PRINT  "  or   -2 Create a folder (any name) and assign RMD: to it..."
  279.   PRINT  "eg.       1>Mkdir df1:temp"
  280.   PRINT  "          1>assign RMD: df1:temp"
  281.   PRINT 
  282.   PRINT  "Press a key ..."
  283.   WHILE INKEY$<>"":WEND
  284.   WHILE INKEY$="":WEND
  285.   FOR x = 1 TO 10 : PRINT  "" : NEXT x
  286.   PRINT  "Further Information ..."
  287.   PRINT  
  288.   PRINT  "Contact me (David A. Caruana) if you have any problems"
  289.   PRINT  "with this program. Please send a blank disk (preferably)"
  290.   PRINT  "with some PD on it . All disks returned with new software!"
  291.   PRINT  "If you like this program, please drop a mail."
  292.   PRINT  "I am not asking for money! .. it's just to know where"
  293.   PRINT  "my proggie has got to !!"
  294.   PRINT  " ** NO PIRACY **"
  295.   PRINT  ""
  296.   PRINT  "For full documentation (of compiler), the source-codes for the "
  297.   PRINT  "compiler and runtime library , documents for the Assembler"
  298.   PRINT  "and linker etc. please buy the 'standard' PCQ Pascal from"
  299.   PRINT  "any PD library . The version of compiler in this shell is"
  300.   PRINT  "found on Fred Fish 339, but there is a newer version available"
  301.   PRINT  "now .."
  302.   PRINT  ""
  303.   PRINT  "I would also like some contacts in the music scene !!"
  304.   PRINT ""
  305.   PRINT  "Address :"
  306.   PRINT  "Snail Mail                   E-Mail"
  307.   PRINT  "'Blossom',                   dac%panther@carla.dist.unige.it"
  308.   PRINT  " Acacia Str.,"
  309.   PRINT  " San Gwann SGN03"
  310.   PRINT  " M A L T A"
  311.   PRINT ""
  312.   PRINT "When writing please state version (Rev C) and where it"
  313.   PRINT "was bought / copied (which PD library)"   
  314. RETURN
  315.  
  316. about:
  317.   PRINT  "About"
  318.   PRINT ""
  319.   PRINT ""
  320.   PRINT ""
  321.   PRINT 
  322.   PRINT  "              P C Q    P A S C A L"
  323.   PRINT  "               Shell environment"
  324.   PRINT 
  325.   PRINT  "PCQ Pascal programmed by ..... Patrick Quaid"
  326.   PRINT  "Shell environment by     ..... David Alan Caruana"
  327.   PRINT  
  328.   PRINT  "Address :"
  329.   PRINT  "Snail Mail                   E-Mail"
  330.   PRINT  "'Blossom',                   dac%panther@carla.dist.unige.it"
  331.   PRINT  " Acacia Str.,"
  332.   PRINT  " San Gwann SGN03"
  333.   PRINT  " M A L T A"
  334.   PRINT 
  335.   PRINT  "Final version : 14 - 11 - 1990"
  336.   PRINT  "New Update    :  6 - 11 - 1992"
  337.   PRINT 
  338. RETURN
  339.  
  340. CLi:
  341.   PRINT  "CLI - Command"
  342.   PRINT  "Redirect output to RMD:CAPTURE"
  343.   INPUT cmmand$
  344.   GOSUB eexecute
  345. RETURN
  346.  
  347. dir:
  348.   PRINT  "Directory"
  349.   PRINT  "Input drive identifier (Return - df0: , 1 - df1: etc.)"
  350.   INPUT df$
  351.   IF df$="" THEN df$="df0:"
  352.   IF df$="1" THEN df$="df1:"
  353.   IF df$="2" THEN df$="df2:"
  354.   IF df$="3" THEN df$="df3:"
  355.   cmmand$="DIR >rmd:capture "+df$+" opt A"
  356.   GOSUB eexecute
  357. RETURN
  358.  
  359. font:
  360.   PRINT  "Change font"
  361.   cmmand$="Gemfont >rmd:capture"
  362.   GOSUB eexecute
  363. RETURN
  364.  
  365. dfree:
  366.   PRINT  "Disk free space"
  367.   PRINT  "Input drive identifier (return for df0:)"
  368.   INPUT df$
  369.   IF df$="" THEN df$="df0:"
  370.   cmmand$="dfree >rmd:capture "+df$
  371.   GOSUB eexecute
  372. RETURN
  373.  
  374. exec:
  375.   PRINT  "Run background task"
  376.   mes1$="Run a background"
  377.   mes2$="task ??? This will"
  378.   mes3$="slow CPU ....."
  379.   sel1$="Yes"
  380.   sel2$="No"
  381.   GOSUB alert
  382.   IF sel = 2 THEN RETURN
  383.   PRINT  "PCQShell>Run background task"
  384.   PRINT  "Input filename"
  385.   INPUT nme$
  386.   IF nme$="" THEN RETURN
  387.   cmmand$="RUN >rmd:capture "+nme$
  388.   GOSUB eexecute
  389. RETURN
  390.  
  391. avail:
  392.   PRINT  "Available Memory ..."
  393.   cmmand$="avail >rmd:capture"
  394.   GOSUB eexecute
  395. RETURN
  396.  
  397. MaKDIR:
  398.   mes1$="Make a new directory"
  399.   mes2$=""
  400.   mes3$=""
  401.   sel1$="Go Ahead!"
  402.   sel2$="Nope .."
  403.   GOSUB alert
  404.   IF sel = 2 THEN RETURN
  405.   PRINT  "Input name for directory ..."
  406.   INPUT nme$
  407.   IF nme$="" THEN RETURN
  408.   cmmand$="makedir "+nme$
  409.   GOSUB eexecute
  410. RETURN
  411.  
  412. xedit:
  413.   PRINT  "Edit Source"
  414.   cmmand$="PCQ_PASCAL:pcq/ed rmd:source.p"
  415.   WINDOW CLOSE 2 : REM get to workbench screen ...
  416.   SCREEN CLOSE 2
  417.   GOSUB eexecute
  418.   SCREEN 2,640,256,2,2 : REM restore our screen ...
  419.   WINDOW 2,"PCQ Pascal Shell by David Alan Caruana",,0,2
  420.   PALETTE 0,.7,.7,.7 : PALETTE 1,0,0,0
  421.   PALETTE 2,1,1,1 : PALETTE 3,.4,.2,.9
  422.   scrn& = PEEKL(WINDOW(7)+46) : POKEW(scrn&+20),17
  423. RETURN
  424.  
  425. xrun:
  426.   PRINT  "Execute program"
  427.   cmmand$="rmd:source"
  428.   WINDOW CLOSE 2
  429.   SCREEN CLOSE 2
  430.   GOSUB eexecute
  431.   SCREEN 2,640,256,2,2 : REM restore our screen ...
  432.   WINDOW 2,"PCQ Pascal Shell by David Alan Caruana",,0,2
  433.   PALETTE 0,.7,.7,.7 : PALETTE 1,0,0,0
  434.   PALETTE 2,1,1,1 : PALETTE 3,.4,.2,.9
  435.   scrn& = PEEKL(WINDOW(7)+46) : POKEW(scrn&+20),17
  436.   CLS
  437.   PRINT "For CLI based programs , go to the CLI (use [Amiga][M]) and"
  438.   PRINT "enter the command RMD:Source at the prompt so as to run program"
  439.   PRINT "directly ." 
  440. RETURN
  441.  
  442. compile:
  443.   PRINT  "COMPILE"
  444.   PRINT  "Compiling , please wait ..."
  445.   IF raminst THEN
  446.       CHDIR "rmd:"
  447.   ELSE
  448.       CHDIR "PCQ_PASCAL:PCQ"
  449.   END IF
  450.   cmmand$="PASCAL >rmd:capture rmd:source.p rmd:source.a"
  451.   flag=1:GOSUB eexecute
  452.   PRINT  "Compilation finished"
  453. RETURN
  454.  
  455. assemble:
  456.   PRINT  "ASSEMBLE"
  457.   PRINT  "Assembling , please wait ..."
  458.   IF raminst THEN
  459.       CHDIR "rmd:"
  460.   ELSE
  461.       CHDIR "PCQ_PASCAL:PCQ"
  462.   END IF
  463.   cmmand$="A68K >rmd:capture rmd:source.a rmd:source.o"
  464.   GOSUB eexecute
  465.   PRINT  "Program Assembled"
  466. RETURN
  467.  
  468. link:
  469.   PRINT  "LINK"
  470.   PRINT  "Linking , please wait ..."
  471.   IF raminst THEN
  472.       CHDIR "rmd:"
  473.   ELSE
  474.       CHDIR "PCQ_PASCAL:PCQ"
  475.   END IF
  476.   cmmand$="BLINK >rmd:capture rmd:source.o to rmd:source library PCQ.lib"
  477.   GOSUB eexecute
  478.   PRINT  "Program Linked - Executable program is in memory ! "
  479. RETURN
  480.  
  481. cal:
  482.   PRINT  "Compile-Assemble-Link"
  483.   GOSUB compile
  484.   GOSUB assemble
  485.   GOSUB link
  486. RETURN
  487.  
  488.  
  489. xsaveobject:
  490.   mes1$="Save PASCAL object file"
  491.   mes2$="(saves an executable file)"
  492.   mes3$=""
  493.   sel1$="PROCEED"
  494.   sel2$="BAIL OUT"
  495.   GOSUB alert
  496.   IF sel = 2 THEN RETURN
  497.   CLS
  498.   PRINT  "Current filename :";
  499.   IF filename$<>"" THEN PRINT  filename$ ELSE PRINT  "NO NAME";"       ";
  500.   sve$=filename$ 
  501.   IF UCASE$(RIGHT$(sve$,2))=".P" THEN
  502.     l = LEN(sve$) - 2 
  503.     sve$ = LEFT$(sve$,l) 
  504.   END IF
  505.   IF sve$<>"" THEN PRINT  "Object filename is :";sve$
  506.   requester "Save Executable",dr3$,filename2$,0
  507.   IF dr3$<>"" AND RIGHT$(dr3$,1)<>":" THEN
  508.       filename2$ = dr3$ + "/" + filename2$
  509.   ELSE
  510.       filename2$ = dr3$ + filename2$
  511.   END IF
  512.   IF filename2$<>"" THEN sve$=filename2$
  513.   IF sve$="" THEN PRINT  "NO FILENAME - SAVE ABORTED" : RETURN
  514.  
  515. REM ***************** ENHANCEMENT ***************
  516.  
  517.   flag99 = 0
  518.   FOR x99 = 1 TO LEN(sve$)
  519.     IF MID$(sve$,x99,1)=":" THEN flag99 = 1
  520.   NEXT x99
  521.   sel = 0
  522.   IF flag99 = 0 THEN 
  523.       mes1$="Save Executable"
  524.      mes2$="Select Disk Drive"
  525.       mes3$="To save to"
  526.       sel1$="Df0:"
  527.       sel2$="Df1:"
  528.       sel = 0
  529.       GOSUB alert
  530.   
  531.     IF sel = 1 THEN sve$ = "df0:"+sve$
  532.     IF sel = 2 THEN sve$ = "df1:"+sve$
  533.   END IF
  534.   cmmand$= "copy PCQ_Pascal:c/copy rmd:copy"
  535.   GOSUB eexecute
  536.  
  537.   mes1$="Save Pascal Object    "
  538.   mes2$="Place object disk     "
  539.   IF sel = 1 THEN mes3$="in internal drive ...     " ELSE mes3$="in disk drive    "
  540.   sel1$="OKEY"
  541.   sel2$="DOKEY"
  542.   GOSUB alert
  543.  
  544. REM *********************************************
  545.  
  546.  
  547.   PRINT  "Saving ..."
  548.   cmmand$ = "rmd:COPY >RMD:Capture rmd:SOURCE "+sve$
  549.   GOSUB eexecute
  550. RETURN  
  551.   
  552. xsavesource:
  553.   mes1$="Save PASCAL source file"
  554.   mes2$=""
  555.   mes3$=""
  556.   sel1$="PROCEED"
  557.   sel2$="BAIL OUT"
  558.   GOSUB alert
  559.   IF sel = 2 THEN RETURN
  560.   
  561.   PRINT  "Current filename :";
  562.   IF filename$<>"" THEN PRINT  filename$ ELSE PRINT  "NO NAME"
  563.   filename2$ = ""
  564.   requester "Save Source",dr2$,filename2$,0 
  565.   IF filename2$<>"" THEN 
  566.       IF dr2$<>""
  567.       IF RIGHT$(dr2$,1)=":" THEN
  568.           filename$=dr2$+filename2$
  569.       ELSE
  570.           filename$=dr2$+"/"+filename2$
  571.     END IF
  572.     END IF
  573.   END IF
  574.   IF filename$="" THEN PRINT  "NO FILENAME - SAVE ABORTED" : RETURN
  575.  
  576. REM ***************** ENHANCEMENT ***************
  577.  
  578.   flag99 = 0
  579.   FOR x99 = 1 TO LEN(filename$)
  580.     IF MID$(filename$,x99,1)=":" THEN flag99 = 1
  581.   NEXT x99
  582.   sel = 0
  583.   IF flag99 = 0 THEN 
  584.       mes1$="Save Pascal Source"
  585.        mes2$="Select Disk Drive"
  586.       mes3$="To save to"
  587.       sel1$="Df0:"
  588.       sel2$="Df1:"
  589.       sel = 0
  590.       GOSUB alert
  591.   
  592.     IF sel = 1 THEN filename$ = "df0:"+filename$
  593.     IF sel = 2 THEN filename$ = "df1:"+filename$
  594.   END IF
  595.   cmmand$= "copy PCQ_Pascal:c/copy rmd:copy"
  596.   GOSUB eexecute
  597.  
  598.   mes1$="Save Pascal Source    "
  599.   mes2$="Place Source disk     "
  600.   IF sel = 1 THEN mes3$="in internal drive ...     " ELSE mes3$="in disk drive    "
  601.   sel1$="OKEY"
  602.   sel2$="DOKEY"
  603.   GOSUB alert
  604.  
  605. REM *********************************************
  606.  
  607.   PRINT  "Saving ..."
  608.   REM **** Enhanced Save Routine
  609.   GOTO enhances:REM Remove this line to disable enhanced save
  610.   cmmand$ = "rmd:COPY >RMD:Capture rmd:SOURCE.p "+filename$
  611.   GOSUB eexecute
  612.   RETURN
  613.   
  614.   
  615.   enhances:
  616.     REM *** This is a simple line-copy routine ... ***
  617.     PRINT "Enhanced Save Activated"
  618.     
  619.     PRINT "Opening ";filename$
  620.     OPEN "O",#1,filename$
  621.     PRINT "Opening rmd:source.p"
  622.     OPEN "I",#2,"rmd:source.p"
  623.     WHILE EOF(2)=0
  624.       LINE INPUT #2,al$
  625.       PRINT #1,al$
  626.     WEND
  627.     CLOSE #1
  628.     CLOSE #2
  629. RETURN  
  630.  
  631. xloadsource:
  632.   mes1$="Load new PASCAL source file"
  633.   mes2$="This will erase current file"
  634.   mes3$="permanently ... "
  635.   sel1$="PROCEED"
  636.   sel2$="BAIL OUT"
  637.   GOSUB alert
  638.   IF sel = 2 THEN RETURN
  639.   REM De-Rem next two commands when installing 'normal' loader
  640.   REM cmmand$= "copy PCQ_Pascal:c/copy rmd:copy"
  641.   REM GOSUB eexecute
  642.   CLS
  643.   PRINT  "Input source filename ..."
  644.   filename$ = ""
  645.   requester "Load Source",dr$,filename$,0
  646.   IF RIGHT$(dr$,1)<>":" AND dr$<>"" THEN
  647.       filename$ = dr$ + "/" + filename$
  648.   ELSE
  649.       filename$ = dr$ + filename$
  650.   END IF
  651.   dr$ = dir$
  652.   flag99 = 0
  653.   FOR x99 = 1 TO LEN(filename$)
  654.     IF MID$(filename$,x99,1)=":" THEN flag99 = 1
  655.   NEXT x99
  656.   sel = 0
  657.   IF flag99 = 0 THEN 
  658.       mes1$="Load Pascal Source"
  659.        mes2$="Select Disk Drive"
  660.       mes3$="To load from"
  661.       sel1$="Df0:"
  662.       sel2$="Df1:"
  663.       GOSUB alert
  664.   
  665.     IF sel = 1 THEN filename$ = "df0:"+filename$
  666.     IF sel = 2 THEN filename$ = "df1:"+filename$
  667.   END IF
  668.   mes1$="Load Pascal Source     "
  669.   mes2$="Place Source disk      "
  670.   IF sel = 1 THEN mes3$="in internal drive .   " ELSE mes3$="in disk drive"
  671.   sel1$="OKEY"
  672.   sel2$="DOKEY"
  673.   GOSUB alert
  674.   PRINT  "Loading ..."
  675.   REM ******* Enhance Loader - Single Drive version ... ******
  676.   GOTO enhance : REM Remove this line to leave normal loader
  677.   CHDIR "rmd:"
  678.   cmmand$ = "COPY "+filename$+" rmd:SOURCE.p"
  679.   GOSUB eexecute
  680.   RETURN
  681.   
  682.   enhance:
  683.     REM *** This is a simple line-copy routine ... ***
  684.     PRINT "Enhanced Load Activated"
  685.     checkfile filename$,chk
  686.     IF chk <> 0 THEN 
  687.         PRINT "File : ";filename$
  688.         PRINT "File not found - Try another filename .."
  689.         RETURN
  690.     END IF
  691.     
  692.     OPEN "I",#1,filename$
  693.     OPEN "O",#2,"rmd:source.p"
  694.     WHILE EOF(1)=0
  695.       LINE INPUT #1,al$
  696.       PRINT #2,al$
  697.     WEND
  698.     CLOSE #1
  699.     CLOSE #2
  700. RETURN
  701.  
  702. SUB checkfile(filename$,chk) STATIC
  703.     REM Test if File exists , enhancement , 5-4-1991 , DAC
  704.     f$ = filename$+CHR$(0) :REM Name of file
  705.     fh& = xopen&(SADD(f$),1005&) :REM Use DOS Open file command
  706.     IF fh& = 0 THEN
  707.         chk = 1
  708.     ELSE
  709.         chk = 0 :REM All is OK
  710.         CALL xclose&(fh&)
  711.     END IF
  712. END SUB          
  713.  
  714. special:
  715.   REM --- Handle output from compiler
  716.   WHILE NOT EOF(1)
  717.     LINE INPUT #1,a$
  718.     IF UCASE$(LEFT$(a$,4))="LINE" THEN
  719.       PRINT  a$
  720.     IF INKEY$<>"" THEN
  721.       WHILE INKEY$="":WEND
  722.     END IF
  723.     END IF
  724.   WEND
  725.   PRINT  a$
  726.   flag = 0
  727. RETURN
  728.  
  729. eexecute:
  730.   REM run cmmand$
  731.   
  732.   CALL execute(SADD(cmmand$+CHR$(0)),0,0)
  733.   OPEN "RMD:capture" FOR INPUT AS #1
  734.   IF flag = 1 THEN GOSUB special
  735.   WHILE NOT EOF(1)
  736.     LINE INPUT #1,a$
  737.     PRINT  a$
  738.     IF INKEY$<>"" THEN
  739.       WHILE INKEY$="":WEND
  740.     END IF
  741.   WEND
  742.   CLOSE #1
  743.   OPEN "O",#1,"rmd:capture":CLOSE #1
  744. RETURN
  745.  
  746. menuhandler:
  747.   menuid = MENU(0)
  748.   menuitem = MENU(1)
  749.   IF helpon THEN GOSUB autohelp : RETURN
  750.   
  751.   IF menuid = 1 AND menuitem = 1 THEN GOSUB xloadsource
  752.   IF menuid = 1 AND menuitem = 2 THEN GOSUB xsavesource
  753.   IF menuid = 1 AND menuitem = 3 THEN GOSUB xsaveobject
  754.   IF menuid = 1 AND menuitem = 4 THEN GOSUB ed
  755.   
  756.   IF menuid = 2 AND menuitem = 1 THEN GOSUB xedit
  757.   IF menuid = 2 AND menuitem = 2 THEN GOSUB compile
  758.   IF menuid = 2 AND menuitem = 3 THEN GOSUB assemble
  759.   IF menuid = 2 AND menuitem = 4 THEN GOSUB link
  760.   IF menuid = 2 AND menuitem = 5 THEN GOSUB cal
  761.   IF menuid = 2 AND menuitem = 6 THEN GOSUB xrun
  762.   
  763.  
  764.   IF menuid = 3 AND menuitem = 1 THEN GOSUB CLi
  765.   IF menuid = 3 AND menuitem = 2 THEN GOSUB dir
  766.   IF menuid = 3 AND menuitem = 3 THEN GOSUB font
  767.   IF menuid = 3 AND menuitem = 4 THEN GOSUB dfree
  768.   IF menuid = 3 AND menuitem = 5 THEN GOSUB exec
  769.   IF menuid = 3 AND menuitem = 6 THEN GOSUB avail
  770.   IF menuid = 3 AND menuitem = 7 THEN GOSUB MaKDIR
  771.  
  772.   IF menuid = 4 AND menuitem = 1 THEN GOSUB about
  773.   IF menuid = 4 AND menuitem = 2 THEN GOSUB instructions
  774.   IF menuid = 4 AND menuitem = 3 THEN GOSUB extend
  775.     IF menuid = 4 AND menuitem = 4 THEN GOSUB autohelp:RETURN
  776.     IF menuid = 4 AND menuitem = 5 THEN GOSUB contact
  777.     
  778.     IF menuid = 5 AND menuitem = 1 THEN GOSUB raminstall
  779.  
  780.   PRINT  "PCQShell>";
  781.   
  782. RETURN
  783.  
  784. contact:
  785.     PRINT "Contact"
  786.     PRINT ""
  787.     PRINT "If you would like more info etc. on this program , why not"
  788.     PRINT "buy the full distribution disk . To do this , contact any "
  789.     PRINT "PD library supplying the FISH disks and ask for Fish 339"
  790.     PRINT ""
  791.     PRINT "If you would like to contact me for any reason , my address is:"
  792.     PRINT ""
  793.     PRINT "David Alan Caruana"
  794.     PRINT "  'Blossom',"
  795.     PRINT "  Acacia Str,"
  796.     PRINT "  San Gwann"
  797.     PRINT "  M A L T A"
  798.     PRINT ""
  799.     PRINT "I hope you enjoy PCQ pascal as much as I did !!"
  800. RETURN
  801.  
  802. autohelp:
  803.     IF NOT helpon THEN
  804.         mes1$ = "   Activate    "
  805.         mes2$ = "   Auto-Help   "
  806.         mes3$ = "       mode ?  "
  807.         sel1$ = "YES"
  808.         sel2$ = "NOPE"
  809.         GOSUB alert
  810.         IF sel = 2 THEN
  811.             PRINT "PCQShell>"; 
  812.             RETURN
  813.         END IF
  814.         helpon = -1 
  815.         CLS 
  816.         PRINT "*** PCQ Pascal Shell - AutoHelp ***"
  817.         PRINT "Select any menu item for help on it"
  818.         PRINT "Select Auto Help menu again to return"
  819.         PRINT "to normal operating mode .."
  820.         PRINT "AutoHelp>";
  821.         RETURN
  822.     END IF
  823.   IF menuid = 1 AND menuitem = 1 THEN GOSUB hxloadsource
  824.   IF menuid = 1 AND menuitem = 2 THEN GOSUB hxsavesource
  825.   IF menuid = 1 AND menuitem = 3 THEN GOSUB hxsaveobject
  826.   IF menuid = 1 AND menuitem = 4 THEN GOSUB hed
  827.   
  828.   IF menuid = 2 AND menuitem = 1 THEN GOSUB hxedit
  829.   IF menuid = 2 AND menuitem = 2 THEN GOSUB hcompile
  830.   IF menuid = 2 AND menuitem = 3 THEN GOSUB hassemble
  831.   IF menuid = 2 AND menuitem = 4 THEN GOSUB hlink
  832.   IF menuid = 2 AND menuitem = 5 THEN GOSUB hcal
  833.   IF menuid = 2 AND menuitem = 6 THEN GOSUB hxrun
  834.   
  835.  
  836.   IF menuid = 3 AND menuitem = 1 THEN GOSUB hCLi
  837.   IF menuid = 3 AND menuitem = 2 THEN GOSUB hdir
  838.   IF menuid = 3 AND menuitem = 3 THEN GOSUB hfont
  839.   IF menuid = 3 AND menuitem = 4 THEN GOSUB hdfree
  840.   IF menuid = 3 AND menuitem = 5 THEN GOSUB hexec
  841.   IF menuid = 3 AND menuitem = 6 THEN GOSUB havail
  842.   IF menuid = 3 AND menuitem = 7 THEN GOSUB hMaKDIR
  843.  
  844.   IF menuid = 4 AND menuitem = 1 THEN GOSUB habout
  845.   IF menuid = 4 AND menuitem = 2 THEN GOSUB hinstructions
  846.   IF menuid = 4 AND menuitem = 3 THEN GOSUB hextend
  847.     IF menuid = 4 AND menuitem = 4 THEN GOSUB xautohelp
  848.     IF menuid = 4 AND menuitem = 5 THEN GOSUB hcontact
  849.     
  850.     IF menuid = 5 AND menuitem = 1 THEN GOSUB hraminstall
  851. RETURN    
  852.  
  853. xautohelp:
  854.     PRINT "AutoHelp is now disactivated"
  855.     PRINT "PCQShell>";
  856.     helpon = 0
  857. RETURN
  858.  
  859. hcontact:
  860.     PRINT "Gives my address !!"
  861.     PRINT "AutoHelp>";
  862. RETURN
  863.  
  864. hraminstall:
  865.     PRINT "Ram Install"
  866.     PRINT "If you have at least 1.5 megs memory or you are using"
  867.     PRINT "a KCS Power PC Board ramdisk , you may copy the compiler,"
  868.     PRINT "assembler , linker and library files to ramdisk for "
  869.     PRINT "quicker compilation . Remember that the include"
  870.     PRINT "files still remain in the directory Pcq_Pascal:pcq/includes/"
  871.     PRINT "AutoHelp>";
  872. RETURN
  873.  
  874. hextend:
  875.     PRINT "Extend Dox"
  876.     PRINT "Gives information on some new program features"
  877.     PRINT "AutoHelp>";
  878. RETURN
  879.  
  880. hinstructions:
  881.     PRINT "Gives instructions on using this program"
  882.     PRINT "AutoHelp>";
  883. RETURN
  884.  
  885. habout:
  886.     PRINT "Gives info on this program .."
  887.     PRINT "AutoHelp>";
  888. RETURN
  889.  
  890. hmakdir:
  891.     PRINT "Make Dir"
  892.     PRINT "Makes new sub directories on disk . Simply specify name .."
  893.     PRINT "AutoHelp>";
  894. RETURN
  895.  
  896. havail:
  897.     PRINT "Avail. mem"
  898.     PRINT "Shows available memory , chipram , fastram and total"
  899.     PRINT "including the max. amount of memory and the largest"
  900.     PRINT "contiguous memory block."
  901.     PRINT "AutoHelp>";
  902. RETURN
  903.  
  904. hexec:
  905.     PRINT "Execute Back."
  906.     PRINT "Runs a background task . Eats memory and processor time"
  907.     PRINT "so beware !! Similar to CLI in usage ."
  908.     PRINT "AutoHelp>";
  909. RETURN
  910.  
  911. hdfree:
  912.     PRINT "Disk Free"
  913.     PRINT "Gives number of bytes free on disk . Enter either drive"
  914.     PRINT "number or drive identifier"
  915.     PRINT "AutoHelp>";
  916. RETURN
  917.  
  918. hfont:
  919.     PRINT "Change Font"
  920.     PRINT "Replaces the system font with GEM-FONT , a smaller and"
  921.     PRINT "neater font . If you want the system font back , select"
  922.     PRINT "again .. "
  923.     PRINT "AutoHelp>";
  924. RETURN
  925.  
  926. hdir:
  927.     PRINT "Directory"
  928.     PRINT "Gives directories of disks . You may enter either nothing"
  929.     PRINT "(directory of Df0:) , the drive number or the subdirectory"
  930.     PRINT "which you want to list ."
  931.     PRINT "AutoHelp>";
  932. RETURN
  933.  
  934. hcli:
  935.     PRINT "CLI Command"
  936.     PRINT "Runs a CLI command from within the shell . Redirect"
  937.     PRINT "the output to the file RMD:Capture . If the output"
  938.     PRINT "is not redirected , it will finish up in the original"
  939.     PRINT "CLI window !!"
  940.     PRINT "AutoHelp>";
  941. RETURN
  942.  
  943. hxrun:
  944.     PRINT "Run Prog"
  945.     PRINT "Runs the program in memory . Unless the program opens its"
  946.     PRINT "own window , the only effect produced will be an error"
  947.     PRINT "message in the CLI window . If you see that nothing happens"
  948.     PRINT "when selecting RUN PROG , go to the CLI (Press [Amiga][M])"
  949.     PRINT "click the CLI , press RETURN and at the CLI prompt type "
  950.     PRINT "RUN Rmd:Source . Your program should then run.."
  951.     PRINT "AutoHelp>";
  952. RETURN
  953.  
  954. hcal:
  955.     PRINT "C-A-L"
  956.     PRINT "Compiles , assembles and links a file in memory"
  957.     PRINT "(saves selecting the individual items)"
  958.     PRINT "AutoHelp>";
  959. RETURN
  960.  
  961. hlink:
  962.     PRINT "Link"
  963.     PRINT "Links the PCQ.Lib library of functions to the object"
  964.     PRINT "module making a complete executable file . The filename"
  965.     PRINT "of the executable is RMD:Source"
  966.     PRINT "AutoHelp>";
  967. RETURN
  968.  
  969. hassemble:
  970.     PRINT "Assemble"
  971.     PRINT "Assembles the assembly module made by the compiler."
  972.     PRINT "Rmd:Source.a assembles to Rmd:Source.o , the unlinked"
  973.     PRINT "object module . The assembler is A68k by Brian R."
  974.     PRINT "Anderson and Charlie Gibbs"
  975.     PRINT "AutoHelp>";
  976. RETURN
  977.  
  978. hcompile:
  979.     PRINT "Compile"
  980.     PRINT "Compiles the source code in memory (RMD:Source.p) producing"
  981.     PRINT "an assembly module (RMD:Source.a) . The compiler is PCQ Pascal"
  982.     PRINT "version 1.1 by Patrick C. Quaid . "
  983.     PRINT "AutoHelp>";
  984. RETURN
  985.  
  986. hxedit:
  987.     PRINT "EDIT"
  988.     PRINT "Loads the editor and the source file in ramdisk . Any "
  989.     PRINT "editor may be used . I have included TxED which is quite"
  990.     PRINT "good and comes in a small file! Before exiting , select"
  991.     PRINT "Save File ([Right Amiga][W]) and save the file to RMD:Source.p"
  992.     PRINT "(this should be the default filename) then press [Right Amiga][Q]"
  993.     PRINT "to quit . NOTE : Use [Amiga][1] to change the screen colors"
  994.     PRINT "within the editor"
  995.     PRINT "AutoHelp>";
  996. RETURN
  997.  
  998. hed:
  999.     PRINT "QUIT"
  1000.     PRINT "This menu option quits the PCQ Pascal Shell (simple , eh!)"
  1001.     PRINT "AutoHelp>";
  1002. RETURN
  1003.  
  1004. hxloadsource:
  1005.     PRINT "Load Source"
  1006.     PRINT "This command loads the source-file into memory"
  1007.     PRINT "This is done by simply copying the required file"
  1008.     PRINT "into the file RMD:source.p , where RMD: is the"
  1009.     PRINT "name assigned to your ramdisk . Since REV B of "
  1010.     PRINT "version 1 , the existence of the file is checked"
  1011.     PRINT "before loading and the drive from which to load"
  1012.     PRINT "is also requested (is not specified in filename)"
  1013.     PRINT "The enhanced load should also cater for users"
  1014.     PRINT "with only one drive , however if you still have"
  1015.     PRINT "trouble I recommend deleting the EXAMPLE files from"
  1016.     PRINT "a copy of your PCQ_Pascal disk and saving your "
  1017.     PRINT "sources in that directory ."
  1018.     PRINT "AutoHelp>";
  1019. RETURN     
  1020.  
  1021. hxsavesource:
  1022.     PRINT "Save Source"
  1023.     PRINT "This command copies the temporary source file"
  1024.     PRINT "in your ramdisk back to a floppy for permanent"
  1025.     PRINT "storage . Default filenames etc. are supported"
  1026.     PRINT "The procedure is similar to that for loading but"
  1027.     PRINT "in reverse !"
  1028.     PRINT "AutoHelp>";
  1029. RETURN
  1030.  
  1031. hxsaveobject:
  1032.     PRINT "Save Object"
  1033.     PRINT "This command saves your object file back to a floppy"
  1034.     PRINT "The file is executable from CLI , but has no icon "
  1035.     PRINT "If you want that , make one yourself ! If this command"
  1036.     PRINT "fails to work (1-Drive users) you must go to the CLI"
  1037.     PRINT "(press [Left Amiga][M]) and copy the file RMD:Source"
  1038.     PRINT "to the appropriate executable name ."
  1039.     PRINT "AutoHelp>";
  1040. RETURN
  1041.   
  1042. raminstall:
  1043.     mes1$ = "Install Compiler"
  1044.     mes2$ = "in ramdisk ?"
  1045.     mes3$ = "(Req. 1.5 Meg)"
  1046.     sel1$ = "Go On"
  1047.     sel2$ = "Abort"
  1048.     GOSUB alert
  1049.     IF sel = 2 THEN RETURN
  1050.     PRINT "PCQShell> Ram Install"
  1051.     PRINT ".. Please Wait .."
  1052.     cmmand$ = "PCQ_Pascal:c/copy pcq_pascal:pcq/pascal rmd:pascal"
  1053.     PRINT "Copying Compiler .. ";
  1054.     GOSUB eexecute
  1055.     PRINT "Ready"
  1056.     cmmand$ = "PCQ_Pascal:c/copy pcq_pascal:pcq/a68k rmd:a68k"
  1057.     PRINT "Copying Assembler .. ";
  1058.     GOSUB eexecute
  1059.     PRINT "Ready"
  1060.     cmmand$ = "PCQ_Pascal:c/copy pcq_pascal:pcq/blink rmd:blink"
  1061.     PRINT "Copying Linker .. ";
  1062.     GOSUB eexecute
  1063.     PRINT "Ready"
  1064.     cmmand$ = "PCQ_Pascal:c/copy pcq_pascal:pcq/pcq.lib rmd:pcq.lib"
  1065.     PRINT "Copying Library file .. ";
  1066.     GOSUB eexecute
  1067.     PRINT "Ready"
  1068.     raminst = -1
  1069.     PRINT "PCQ Pascal Installed in Ramdisk .."
  1070. RETURN
  1071.  
  1072. ed:
  1073.   mes1$="Do you really want"
  1074.   mes2$="to exit ???"
  1075.   
  1076.   sel1$="Yes"
  1077.   sel2$="Nope"
  1078.   GOSUB alert
  1079.   IF sel = 2 THEN RETURN
  1080.   WINDOW CLOSE 2
  1081.   SCREEN CLOSE 2
  1082.   
  1083.   END
  1084. RETURN
  1085.  
  1086. alert:
  1087.   CLS
  1088.   l1 = LEN(mes1$)
  1089.   l2 = LEN(mes2$)
  1090.   l3 = LEN(mes3$)
  1091.   l = l1 : IF l2 > l THEN l = l2 : IF l3 > l THEN l = l3
  1092.   boxw = (l*8)+16
  1093.   boxh = (5*8)+16
  1094.   boxx = (600 - boxw)/2
  1095.   boxy = (240 - boxh)/2
  1096.   textx = boxx/8
  1097.   texty = boxy/8
  1098.   
  1099.   LOCATE texty+0,textx : PRINT  mes1$
  1100.   PRINT TAB(textx);mes2$
  1101.   PRINT TAB(textx); mes3$
  1102.   
  1103.   sel1tx = textx
  1104.   sel2tx = (l - LEN(sel2$))+textx
  1105.   LOCATE texty+4,sel1tx : PRINT  sel1$
  1106.   LOCATE texty+4,sel2tx : PRINT  sel2$
  1107.   sel1xs = (sel1tx*8)-16
  1108.   sel1xe = sel1xs + (LEN(sel1$)*8) + 16
  1109.   sel2xs = (sel2tx*8)-16
  1110.   sel2xe = sel2xs + (LEN(sel2$)*8) + 16
  1111.   selys = ((texty+4)*8)-8
  1112.   selye = ((texty+4)*8)+8
  1113.   
  1114.   LINE (sel1xs,selys)-(sel1xe,selys),2
  1115.   LINE (sel1xs,selys)-(sel1xs,selye),2
  1116.   LINE (sel1xe,selys)-(sel1xe,selye),1
  1117.   LINE (sel1xs,selye)-(sel1xe,selye),1
  1118.   LINE (sel2xs,selys)-(sel2xe,selys),2
  1119.   LINE (sel2xs,selys)-(sel2xs,selye),2
  1120.   LINE (sel2xe,selys)-(sel2xe,selye),1
  1121.   LINE (sel2xs,selye)-(sel2xe,selye),1
  1122.   
  1123.   LINE (boxx-24,boxy-8)-(boxx-8+boxw,boxy-8),2
  1124.   LINE (boxx-24,boxy-8)-(boxx-24,boxy-8+boxh),2,b
  1125.   LINE (boxx-8+boxw,boxy-8)-(boxx-8+boxw,boxy-8+boxh),1,b
  1126.   LINE (boxx-24,boxy-8+boxh)-(boxx-8+boxw,boxy-8+boxh),1,b
  1127.   
  1128.   retry:
  1129.   WHILE MOUSE(0)<>0:WEND
  1130.   WHILE MOUSE(0)=0:WEND
  1131.   x = MOUSE(1):y = MOUSE(2)
  1132.   
  1133.   IF y<selys OR y>selye THEN GOTO retry
  1134.   
  1135.   sel = 0
  1136.   IF x>sel1xs AND x<sel1xe THEN sel = 1
  1137.   IF x>sel2xs AND x<sel2xe THEN sel = 2
  1138.   IF sel = 0 THEN GOTO retry
  1139.   CLS
  1140.   mes1$=" "
  1141.   mes2$=" "
  1142.   mes3$=" "
  1143.   sel1$=" "
  1144.   sel2$=" "
  1145. RETURN
  1146.  
  1147.   
  1148.  
  1149.